#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
    int data;
    struct node* next;
}Node;
Node* Create_List();
void List_head_insert(Node* head,int data); //头插法
void List_tail_insert(Node* head,int data);//尾插法
void show_List(Node* head);//链表元素的显示
void List_delet(Node* head,int data);
void List_clear(Node* head);
int isempty(Node* head);//判断是否为空
int main(){
    Node* head=Create_List();
    List_head_insert(head,1);
    List_tail_insert(head,2);
    List_tail_insert(head,3);
    List_tail_insert(head,4);
    List_tail_insert(head,5);
    show_List(head);
    int n;
    printf("\n请输入要删除的元素\n");
    scanf("%d",&n);
    List_delet(head,n);
    show_List(head);
    printf("链表已清空\n");
    List_clear(head);
    show_List(head);
    return 0;
}
Node* Create_List(){
    Node* head=(Node*)malloc(sizeof(Node));
    head->data=0;
    head->next=NULL;
    return head;//创建的单链表中head中的数据为长度
}
void show_List(Node* head){
    printf("\n链表中的元素个数为:%d\n",head->data);
    Node* pstr=head->next;
    for(;pstr!=NULL;pstr=pstr->next){
        printf(pstr==head->next?"%d":"->%d",pstr->data);
    }
}
int isempty(Node* head){
    if(head->next==NULL&&head->data==0){
        return 1;
    }
    return 0;
}
void List_head_insert(Node* head,int data){
    Node* pnew=(Node*)malloc(sizeof(Node));
    pnew->data=data;
    if(isempty(head)==1){
        head->next=pnew;
        pnew->next=NULL;
    }
    else{
        pnew->next=head->next;
        head->next=pnew;
    }
    head->data++;
}
void List_tail_insert(Node* head,int data){
    Node* pstr=head;
    while(pstr->next!=NULL){
        pstr=pstr->next;
    }
    Node* pnew=(Node*)malloc(sizeof(Node));
    pnew->data=data;
    pstr->next=pnew;
    pnew->next=NULL;
    pstr=pnew;
    head->data++;
}
void List_delet(Node* head,int data){
    if(isempty(head)){
        printf("链表为空,删除失败\n");
    }
    else{
        Node* pstr=head;
        int Flags=0;
        for(;pstr->next->next!=NULL;pstr=pstr->next){
            if(pstr->next->data==data){
                Node* temp=pstr->next;
                pstr->next=temp->next;
                free(temp);
                Flags=1;
            }
        }
         
        if(Flags==1){
            printf("元素已删除\n");
            head->data--;
        }
       
        else if(Flags==0&&pstr->next->data==data){
            Node* ptem=pstr->next;
            pstr->next=NULL;
            free(ptem);
        }
        else if(Flags==0&&pstr->next->data!=data){
            printf("元素不存在删除失败\n");
        }
    }

}
void List_clear(Node* head){
    // Node* pstr=head->next;
    // for(;pstr!=NULL;pstr=pstr->next){
    //     List_delet(head,pstr->data);
    // }
    head->data=0;
    head->next=NULL;
}